package com.ybkj.o2o.mc.mapper;


import com.ybkj.o2o.mc.entity.PassengerGrade;

import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface PassengerGradeMapper {

  /**
   * 保存乘客等级信息.
   *
   * @param record 乘客等级
   * @return 受影响行数
   */
  int insert(PassengerGrade record);

  /**
   * 根据名称和系统key查询乘客等级信息.
   *
   * @param name   等级名称
   * @param appKey 系统key
   * @return 等级
   */
  PassengerGrade selectByNameAndAppKey(@Param("name") String name, @Param("appKey") String appKey);
  
  Long countByNameAndAppKey(@Param("name") String name,@Param("companyId")Long companyId,
      @Param("appKey") String appKey);

  /**
   * 根据主键和系统key查询乘客等级信息.
   *
   * @param gradeId 等级主键
   * @param appKey  系统key
   * @return 等级信息
   */
  PassengerGrade selectByIdAndAppKey(@Param("id") Long gradeId, @Param("companyId")Long companyId,
      @Param("appKey") String appKey);

  /**
   * 根据主键与系统key修改等级信息.
   *
   * @param record 等级信息
   * @return 受影响的行数
   */
  int updateByPrimaryKey(PassengerGrade record);

  /**
   * 根据主键与系统key删除等级信息.
   *
   * @param gradeId 等级主键
   * @param appKey  系统key
   * @return 受影响的行数
   */
  int deleteByIdAndAppkey(@Param("id") Long gradeId, @Param("appKey") String appKey);

  /**
   * 根据系统key查询默认等级信息.
   * @param appKey 系统key
   * @return 等级信息
   */
  PassengerGrade selectDefault(@Param("companyId")Long companyId,@Param("appKey") String appKey);

  /**
   * 根据系统key查询所有等级信息.
   *
   * @param appKey 系统key
   * @return 等级列表
   */
  List<PassengerGrade> selectByAppKey(String appKey);

  /**
   * 分页查询所有等级信息.
   *
   * @param offset 偏移量
   * @param rows   每页数量
   * @return 等级列表
   */
  List<PassengerGrade> selectByPage(@Param("offset") int offset, @Param("rows") int rows);

  /**
   * 统计所有记录数.
   *
   * @return 记录总数
   */
  long countAll();

  /**
   * 根据公司id和appKey查询默认等级 .
   * @param companyId  公司id
   * @param appKey  区分系统
   * @return PassengerGrade 
   */
  PassengerGrade selectDefaultByCompanyId(@Param("companyId") Long companyId,
      @Param("appKey") String appKey);
  
  /**
   * 修改指定公司的默认等级 .
   * @param defaultGrade    默认等级
   * @param id  等级id
   * @param companyId   公司id
   * @param appKey  区分系统
   * @return int
   */
  int updateDefault(@Param("defaultGrade") boolean defaultGrade,@Param("id") Long id,
      @Param("companyId") Long companyId,@Param("appKey") String appKey);
  
  /**
   * 根据等级名称和公司id查询等级 .
   * @param name    等级名称
   * @param companyId   公司id
   * @param appKey  区分系统
   * @return PassengerGrade
   */
  PassengerGrade findByNameAndCompanyId(@Param("name")String name, 
      @Param("companyId")Long companyId, @Param("appKey")String appKey);

  /**
   * 根据公司id查询客户等级 .
   * @param companyId   公司id
   * @param appKey      区分系统
   */
  List<PassengerGrade> findByCompany(@Param("companyId")Long companyId,
                                     @Param("appKey")String appKey);

  int updateCompanyName(@Param("companyId")Long companyId,
                        @Param("abbreviation")String abbreviation,
                        @Param("appKey")String appKey);

  PassengerGrade findByIdAndAppKey(@Param("gradeId") Long gradeId, @Param("appKey") String appKey);
}
